package Vista;

import Entidades.*;
import Logica.FactoryVistas;
import Logica.LogicaAplicacion;
import Logica.LogicaPago;
import Logica.LogicaProveedorPregunta;
import Logica.LogicaTipoMovil;
import java.awt.Color;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.swing.JOptionPane;
import javax.swing.table.DefaultTableModel;
import java.awt.Dimension;
import java.awt.Toolkit;

/**
 *
 * @author Puma
 */
public class RegistroTelefoniaMovil extends javax.swing.JFrame implements Runnable {

    private Pattern patron = Pattern.compile("[A-Z,a-z,&%$#@!()*^]");
    private Matcher matcher = null;
    private int cuentasTotales = 0;
    private int minutos = 0, segundos = 0, horas = 0;
    private Boolean inicio = true;
    private Thread t;
    private ArrayList<Proveedor> proveedores = new ArrayList<Proveedor>();
    private Boolean esUnProveedor = false;
    private ArrayList servicios = null;
    private ArrayList<Historica> inserts = new ArrayList<Historica>();
    private int numPreg = 8;
    private int posicionActual;
    private Boolean fuePrevia = false;
    private Historica historica = null;
    private Boolean estadoFinal = false;
    private Boolean primeraVez = true;

    /**
     * Creates new form RegistroEnlancesDedicados
     */
    public RegistroTelefoniaMovil(int minutos, int segundos, int horas, ArrayList servicios) {
        initComponents();
        this.minutos = minutos;
        this.segundos = segundos;
        this.horas = horas;
        this.servicios = servicios;
        iniciarReloj();
    }

    public RegistroTelefoniaMovil(int minutos,int segundos, int horas, ArrayList servicios,int posicionActual){
        initComponents();
        jBAgregarProveedorNuevo.setEnabled(false);
        jCProveedores.setVisible(false);
        jComboPaisesCiudadesDinamico.setVisible(false);
        jTCantidad.setVisible(false);
        jComboVelocidadesDinamico.setVisible(false);
        jBAgregarTabla.setVisible(false);
        this.minutos = minutos;
        this.segundos = segundos;
        this.horas = horas;
        this.servicios = servicios;
        this.setPosicionActual(posicionActual);
        iniciarReloj();
        agregarPantalla();
        System.out.println("Posicion actual: "+posicionActual);
        this.jComboPaisesCiudadesDinamico.setVisible(false);
            this.jComboVelocidadesDinamico.setVisible(false);
            this.jCProveedores.setVisible(false);
            this.jTCantidad.setVisible(false);
            this.jBAgregarTabla.setVisible(false);
            jTOtrosTipoPago.setVisible(false);
    }

     public Boolean getEstadoFinal() {
        return estadoFinal;
    }

    public void setEstadoFinal(Boolean estadoFinal) {
        this.estadoFinal = estadoFinal;
    }
    
    public RegistroTelefoniaMovil() {
        initComponents();
         jBAgregarProveedorNuevo.setEnabled(false);
        jCProveedores.setVisible(false);
        jComboPaisesCiudadesDinamico.setVisible(false);
        jTCantidad.setVisible(false);
        jComboVelocidadesDinamico.setVisible(false);
        jBAgregarTabla.setVisible(false);
    }

    private void iniciarReloj() {
        t = new Thread(this);
        t.start();
    }

    private void agregarPantalla(){
        LogicaAplicacion.agregarPantallaLista(new PantallaAplicacion(this, numPreg));
    }

    public Boolean getFuePrevia() {
        return fuePrevia;
    }

    public void setFuePrevia(Boolean fuePrevia) {
        this.fuePrevia = fuePrevia;
    }

    public ArrayList<Historica> getInserts() {
        return inserts;
    }

    public void setInserts(ArrayList<Historica> inserts) {
        this.inserts = inserts;
    }

     public void hacerVisible(Boolean visible, int posicionActual){
        this.setPosicionActual(posicionActual);
        this.setFuePrevia(true);
        this.setInserts(new ArrayList<Historica>());
        this.setVisible(visible);
        System.out.println("Posicion actual: "+posicionActual);

         if (this.getEstadoFinal()){
         }
         else {
            this.jComboPaisesCiudadesDinamico.setVisible(false);
            this.jComboVelocidadesDinamico.setVisible(false);
            this.jCProveedores.setVisible(false);
            this.jTCantidad.setVisible(false);
            this.jBAgregarTabla.setVisible(false);
         }
    }

    public void hacerVisibleDespuesSiguiente(Boolean visible, int posicionActual){
        this.setPosicionActual(posicionActual);
        this.setInserts(new ArrayList<Historica>());
        this.setVisible(visible);
        System.out.println("Posicion actual: "+posicionActual);

         if (this.getEstadoFinal()){
         }
         else {
            this.jComboPaisesCiudadesDinamico.setVisible(false);
            this.jComboVelocidadesDinamico.setVisible(false);
            this.jCProveedores.setVisible(false);
            this.jTCantidad.setVisible(false);
            this.jBAgregarTabla.setVisible(false);
         }
    }

    public int getPosicionActual() {
        return posicionActual;
    }

    private void setPosicionActual(int posicionActual) {
        this.posicionActual = posicionActual;
    }
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLayeredPane3 = new javax.swing.JLayeredPane();
        jLayeredPane2 = new javax.swing.JLayeredPane();
        jLabel3 = new javax.swing.JLabel();
        jComboTipoLinea = new javax.swing.JComboBox();
        jComboTiposPago = new javax.swing.JComboBox();
        jLabel4 = new javax.swing.JLabel();
        jLabel6 = new javax.swing.JLabel();
        jLInformacionProveedor = new javax.swing.JLabel();
        jBAgregarInfoTabla = new javax.swing.JButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        jTInformacionProveedores = new javax.swing.JTable();
        jTCantidadLíneas = new javax.swing.JTextField();
        jLabel10 = new javax.swing.JLabel();
        JBPrev = new javax.swing.JButton();
        jBAceptar = new javax.swing.JButton();
        jCProveedores = new javax.swing.JComboBox();
        jComboPaisesCiudadesDinamico = new javax.swing.JComboBox();
        jTCantidad = new javax.swing.JTextField();
        jComboVelocidadesDinamico = new javax.swing.JComboBox();
        jBAgregarTabla = new javax.swing.JButton();
        jCProveedoresTabla = new javax.swing.JComboBox();
        jLCuentaActualizada = new javax.swing.JLabel();
        jTOtrosTipoPago = new javax.swing.JTextField();
        jLayeredPane1 = new javax.swing.JLayeredPane();
        jCBRentaBas = new javax.swing.JCheckBox();
        jCBCANTV = new javax.swing.JCheckBox();
        jCBAlgunas = new javax.swing.JCheckBox();
        jLabel5 = new javax.swing.JLabel();
        jLabel11 = new javax.swing.JLabel();
        jLabel12 = new javax.swing.JLabel();
        jBFinalizarSeleccion = new javax.swing.JButton();
        jScrollPane2 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jCBOtros = new javax.swing.JCheckBox();
        jTOtroProveedor = new javax.swing.JTextField();
        jBAgregarProveedorNuevo = new javax.swing.JButton();
        jTCuentas = new javax.swing.JTextField();
        jLLogo = new javax.swing.JLabel();
        jLTitulo = new javax.swing.JLabel();
        jLabel1 = new javax.swing.JLabel();
        jLabel9 = new javax.swing.JLabel();
        jLSponsor = new javax.swing.JLabel();
        jLTimer = new javax.swing.JLabel();
        jBAceptarCantidad = new javax.swing.JButton();
        jLabel8 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jLabel3.setText("Tipo de Línea:");
        jLabel3.setBounds(10, 120, 110, 20);
        jLayeredPane2.add(jLabel3, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jComboTipoLinea.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "- Seleccione", "Prepago", "Postpago" }));
        jComboTipoLinea.setEnabled(false);
        jComboTipoLinea.setBounds(140, 120, 160, 20);
        jLayeredPane2.add(jComboTipoLinea, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jComboTiposPago.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "- Seleccione", "Completamente", "Solamente la renta básica", "Algunas completamente", "Algunas una parte del consumo", "Lo paga el empleado", "Otro:", "No sabe / no contesta" }));
        jComboTiposPago.setEnabled(false);
        jComboTiposPago.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jComboTiposPagoActionPerformed(evt);
            }
        });
        jComboTiposPago.setBounds(140, 160, 160, 20);
        jLayeredPane2.add(jComboTiposPago, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel4.setText("Tipos de pago:");
        jLabel4.setBounds(10, 160, 100, 20);
        jLayeredPane2.add(jLabel4, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel6.setText("Cantidad de Líneas:");
        jLabel6.setBounds(10, 80, 120, 20);
        jLayeredPane2.add(jLabel6, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLInformacionProveedor.setText("Proveedor:");
        jLInformacionProveedor.setBounds(10, 50, 130, 14);
        jLayeredPane2.add(jLInformacionProveedor, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jBAgregarInfoTabla.setText("Agregar a tabla >");
        jBAgregarInfoTabla.setEnabled(false);
        jBAgregarInfoTabla.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBAgregarInfoTablaActionPerformed(evt);
            }
        });
        jBAgregarInfoTabla.setBounds(210, 200, 150, 23);
        jLayeredPane2.add(jBAgregarInfoTabla, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jTInformacionProveedores.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Proveedor", "Tipo de Línea", "Cantidad", "Tipo de Pago"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                true, true, true, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        jScrollPane1.setViewportView(jTInformacionProveedores);

        jScrollPane1.setBounds(480, 40, 480, 181);
        jLayeredPane2.add(jScrollPane1, javax.swing.JLayeredPane.DEFAULT_LAYER);
        jTCantidadLíneas.setBounds(140, 80, 38, 20);
        jLayeredPane2.add(jTCantidadLíneas, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel10.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel10.setText("De la líneas móviles que posee con cada proveedor, por favor indique si es pagada completamente por la empresa y si es prepago o postpago?");
        jLabel10.setBounds(10, 20, 950, 14);
        jLayeredPane2.add(jLabel10, javax.swing.JLayeredPane.DEFAULT_LAYER);

        JBPrev.setText("< Prev");
        JBPrev.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                JBPrevActionPerformed(evt);
            }
        });
        JBPrev.setBounds(770, 270, 73, 23);
        jLayeredPane2.add(JBPrev, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jBAceptar.setText("Aceptar");
        jBAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBAceptarActionPerformed(evt);
            }
        });
        jBAceptar.setBounds(860, 270, 71, 23);
        jLayeredPane2.add(jBAceptar, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jCProveedores.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "- Seleccione", "CANTV", "Movistar / Telefónica", "DIGITEL", "Otro" }));
        jCProveedores.setBounds(400, 230, 110, 20);
        jLayeredPane2.add(jCProveedores, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jComboPaisesCiudadesDinamico.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "- Seleccione", "Prepago", "Postpago" }));
        jComboPaisesCiudadesDinamico.setBounds(530, 230, 100, 20);
        jLayeredPane2.add(jComboPaisesCiudadesDinamico, javax.swing.JLayeredPane.DEFAULT_LAYER);
        jTCantidad.setBounds(660, 230, 90, 20);
        jLayeredPane2.add(jTCantidad, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jComboVelocidadesDinamico.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "- Seleccione", "Completamente", "Solamente la renta básica", "Algunas completamente", "Algunas una parte del consumo", "Lo paga el empleado", "Otro:", "No sabe / no contesta" }));
        jComboVelocidadesDinamico.setBounds(770, 230, 110, 20);
        jLayeredPane2.add(jComboVelocidadesDinamico, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jBAgregarTabla.setText("+");
        jBAgregarTabla.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBAgregarTablaActionPerformed(evt);
            }
        });
        jBAgregarTabla.setBounds(890, 230, 40, 23);
        jLayeredPane2.add(jBAgregarTabla, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jCProveedoresTabla.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "- Seleccione" }));
        jCProveedoresTabla.setBounds(140, 50, 160, 20);
        jLayeredPane2.add(jCProveedoresTabla, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLCuentaActualizada.setFont(new java.awt.Font("Tahoma", 0, 14)); // NOI18N
        jLCuentaActualizada.setText("Líneas faltantes por registrar: ");
        jLCuentaActualizada.setBounds(20, 230, 290, 30);
        jLayeredPane2.add(jLCuentaActualizada, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jTOtrosTipoPago.setText("-  especifique -");
        jTOtrosTipoPago.addFocusListener(new java.awt.event.FocusAdapter() {
            public void focusGained(java.awt.event.FocusEvent evt) {
                jTOtrosTipoPagoFocusGained(evt);
            }
        });
        jTOtrosTipoPago.setBounds(310, 160, 140, 20);
        jLayeredPane2.add(jTOtrosTipoPago, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLayeredPane2.setBounds(6, 380, 960, 300);
        jLayeredPane3.add(jLayeredPane2, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jCBRentaBas.setBackground(new java.awt.Color(255, 255, 255));
        jCBRentaBas.setText("Movistar / Telefónica");
        jCBRentaBas.setBounds(20, 100, 180, 23);
        jLayeredPane1.add(jCBRentaBas, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jCBCANTV.setBackground(new java.awt.Color(255, 255, 255));
        jCBCANTV.setText("CANTV");
        jCBCANTV.setBounds(20, 70, 120, 23);
        jLayeredPane1.add(jCBCANTV, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jCBAlgunas.setBackground(new java.awt.Color(255, 255, 255));
        jCBAlgunas.setText("DIGITEL");
        jCBAlgunas.setBounds(20, 130, 290, 23);
        jLayeredPane1.add(jCBAlgunas, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel5.setText("Comentarios Adicionales del entrevistado:");
        jLabel5.setBounds(340, 40, 310, 14);
        jLayeredPane1.add(jLabel5, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel11.setText("Proveedores:");
        jLabel11.setBounds(10, 40, 140, 14);
        jLayeredPane1.add(jLabel11, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel12.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel12.setText("¿Con cuales proveedores posee usted Líneas Móviles en este momento?");
        jLabel12.setBounds(0, 20, 750, 14);
        jLayeredPane1.add(jLabel12, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jBFinalizarSeleccion.setText("Finalizar Selección");
        jBFinalizarSeleccion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBFinalizarSeleccionActionPerformed(evt);
            }
        });
        jBFinalizarSeleccion.setBounds(20, 190, 130, 23);
        jLayeredPane1.add(jBFinalizarSeleccion, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane2.setViewportView(jTextArea1);

        jScrollPane2.setBounds(360, 60, 520, 170);
        jLayeredPane1.add(jScrollPane2, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jCBOtros.setBackground(new java.awt.Color(255, 255, 255));
        jCBOtros.setText("Otro:");
        jCBOtros.setBounds(20, 160, 60, 20);
        jLayeredPane1.add(jCBOtros, javax.swing.JLayeredPane.DEFAULT_LAYER);
        jTOtroProveedor.setBounds(130, 160, 140, 20);
        jLayeredPane1.add(jTOtroProveedor, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jBAgregarProveedorNuevo.setText("Agregar otro Proveedor");
        jBAgregarProveedorNuevo.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBAgregarProveedorNuevoActionPerformed(evt);
            }
        });
        jBAgregarProveedorNuevo.setBounds(160, 190, 160, 23);
        jLayeredPane1.add(jBAgregarProveedorNuevo, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLayeredPane1.setBounds(10, 156, 940, 240);
        jLayeredPane3.add(jLayeredPane1, javax.swing.JLayeredPane.DEFAULT_LAYER);
        jTCuentas.setBounds(180, 130, 38, 20);
        jLayeredPane3.add(jTCuentas, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLLogo.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Vista/Imagenes/DatinvestLogo.png"))); // NOI18N
        jLLogo.setBounds(10, 10, 80, 80);
        jLayeredPane3.add(jLLogo, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLTitulo.setFont(new java.awt.Font("Tahoma", 3, 14)); // NOI18N
        jLTitulo.setText(".:: Instrumento de emprendedores - Planilla de servicio Móvil Corporativo::. ");
        jLTitulo.setBounds(90, 20, 590, 14);
        jLayeredPane3.add(jLTitulo, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel1.setText("Cantidad de Líneas:");
        jLabel1.setBounds(50, 120, 130, 40);
        jLayeredPane3.add(jLabel1, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel9.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        jLabel9.setText("¿Qué cantidad de Líneas Móviles posee en este momento?");
        jLabel9.setBounds(10, 100, 560, 14);
        jLayeredPane3.add(jLabel9, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLSponsor.setText("Desarrollado para Datinvest C.A");
        jLSponsor.setBounds(110, 40, 220, 14);
        jLayeredPane3.add(jLSponsor, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLTimer.setText("jLabel12");
        jLTimer.setBounds(900, 10, 60, 14);
        jLayeredPane3.add(jLTimer, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jBAceptarCantidad.setText("Aceptar");
        jBAceptarCantidad.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jBAceptarCantidadActionPerformed(evt);
            }
        });
        jBAceptarCantidad.setBounds(230, 130, 100, 23);
        jLayeredPane3.add(jBAceptarCantidad, javax.swing.JLayeredPane.DEFAULT_LAYER);

        jLabel8.setIcon(new javax.swing.ImageIcon(getClass().getResource("/Vista/Imagenes/fondoBlanco.png"))); // NOI18N
        jLabel8.setText("jLabel8");
        jLabel8.setBounds(0, 0, 990, 690);
        jLayeredPane3.add(jLabel8, javax.swing.JLayeredPane.DEFAULT_LAYER);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jLayeredPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 991, Short.MAX_VALUE)
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(jLayeredPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 395, Short.MAX_VALUE)
        );

        setSize(new java.awt.Dimension(1007, 433));
        setLocationRelativeTo(null);
    }// </editor-fold>//GEN-END:initComponents

    private void jBFinalizarSeleccionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBFinalizarSeleccionActionPerformed

        if (JOptionPane.showConfirmDialog(null,"¿Está seguro de la selección realizada?"
            + "","Información",
            JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION){
       jCProveedoresTabla.removeAllItems();
    jCProveedoresTabla.addItem("- Seleccione");

        if (jCBCANTV.isSelected())
            jCProveedoresTabla.addItem("CANTV");
        
        if (jCBRentaBas.isSelected())
            jCProveedoresTabla.addItem("Movistar / Telefónica");
        
        if (jCBAlgunas.isSelected())
            jCProveedoresTabla.addItem("DIGITEL");
        
        if (jCBOtros.isSelected())
            jCProveedoresTabla.addItem("Otro");
          
            if (proveedores.size() == 1) {
                esUnProveedor = true;
            }

             this.setMinimumSize(new Dimension(903,730));
                    Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
                    Dimension ventana = getSize();
                this.setLocation((pantalla.width - ventana.width) / 2,
                                (pantalla.height - ventana.height) / 2);

            bloquearRadios();
            jBFinalizarSeleccion.setEnabled(false);
            jBAgregarProveedorNuevo.setEnabled(true);
            jComboTipoLinea.setEnabled(true);
            jComboTiposPago.setEnabled(true);
            jBAgregarInfoTabla.setEnabled(true);
            jTCantidadLíneas.setEnabled(true);
            jBAgregarInfoTabla.setEnabled(true);
            jCProveedoresTabla.setEnabled(true);
            
            jLCuentaActualizada.setText("Líneas faltantes por registrar: "+cuentasTotales);


        } else {
            JOptionPane.showMessageDialog(null, "Debe Seleccionar al menos "
                    + "un dispositivo", "Error", JOptionPane.ERROR_MESSAGE);
        }
        
    }//GEN-LAST:event_jBFinalizarSeleccionActionPerformed

    private void jBAgregarInfoTablaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBAgregarInfoTablaActionPerformed

        // Validación para primer o último nodo.    

        if ((proveedores.size() - 1) == 0) {
            esUnProveedor = true;
        }
        
        if (primeraVez){
            
            if (!contieneLetras(jTCantidadLíneas.getText())) {

             if (cuentasTotales-Integer.parseInt(jTCantidadLíneas.getText()) >= 0){
                
                cuentasTotales = cuentasTotales-Integer.parseInt(jTCantidadLíneas.getText());
                
                jLCuentaActualizada.setText("Puertos faltantes por registrar: "+cuentasTotales);

                        InsertarEnTabla(jCProveedoresTabla.getSelectedItem().toString(),
                                jTCantidadLíneas.getText(), jComboTipoLinea.getSelectedItem().toString(),
                                jComboTiposPago.getSelectedItem().toString());
                       
                        jCProveedoresTabla.setSelectedIndex(0);
                        jTOtroProveedor.setText("");
                        jComboTiposPago.setSelectedIndex(0);
                        jComboTipoLinea.setSelectedIndex(0);
                        jTOtrosTipoPago.setText("");
                    
            }
                 else {
                      JOptionPane.showMessageDialog(null,"No se pueden "
                      + "registrar esa cantidad de líneas"
                    ,"Error",JOptionPane.ERROR_MESSAGE);    
                }
            }else {
                JOptionPane.showMessageDialog(null, "La cantidad debe ser numérica", "Error", JOptionPane.ERROR_MESSAGE);
            }         
        }
        else {
            
            if (!contieneLetras(jTCantidadLíneas.getText())) {

                        InsertarEnTabla(jCProveedoresTabla.getSelectedItem().toString(),
                                jTCantidadLíneas.getText(), jComboTipoLinea.getSelectedItem().toString(),
                                jComboTiposPago.getSelectedItem().toString());
                       
                        jCProveedoresTabla.setSelectedIndex(0);
                        jTOtroProveedor.setText("");
                        jComboTiposPago.setSelectedIndex(0);
                        jComboTipoLinea.setSelectedIndex(0);
                        jTOtrosTipoPago.setText("");
                    
            }else {
                JOptionPane.showMessageDialog(null, "La cantidad debe ser numérica", "Error", JOptionPane.ERROR_MESSAGE);
            }       
        }
    }//GEN-LAST:event_jBAgregarInfoTablaActionPerformed

    private void JBPrevActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_JBPrevActionPerformed
        try {
            this.setVisible(false);
            LogicaAplicacion.mostrarPantallaRegreso(this.getPosicionActual() - 1);
        } catch (Exception ex) {
            this.setVisible(true);
            JOptionPane.showMessageDialog(null,ex.getMessage());
        }
    }//GEN-LAST:event_JBPrevActionPerformed

    private void jBAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBAceptarActionPerformed
        primeraVez = false;
        actualizarInfoTabla();
        LogicaAplicacion.actualizarPantalla(numPreg, this);

       if (!this.fuePrevia){
            System.out.println("Agregar la pantalla a la lista, y ya!");
            this.servicios.remove(0);
            FactoryVistas.obtenerSiguientePregunta(servicios, minutos, segundos, horas,this.getPosicionActual()+1).setVisible(true);
            this.setVisible(false);
        }
       else {
            System.out.println("No voy a remover de la lista de servicios, ni insertare en la lista... pero actualizare");
            LogicaAplicacion.mostrarPantallaSiguiente(this.getPosicionActual()+1);
            this.setVisible(false);
       }
    }//GEN-LAST:event_jBAceptarActionPerformed

    private void jBAgregarTablaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBAgregarTablaActionPerformed
      if (!contieneLetras(jTCantidad.getText())){  
        InsertarEnTabla(jCProveedores.getSelectedItem().toString(),
                jTCantidad.getText(),
                jComboPaisesCiudadesDinamico.getSelectedItem().toString(),
                jComboVelocidadesDinamico.getSelectedItem().toString());
        jCProveedores.setSelectedIndex(0);
        jComboVelocidadesDinamico.setSelectedIndex(0);
        jComboPaisesCiudadesDinamico.setSelectedIndex(0);
        jTCantidad.setText("");
      }
      else JOptionPane.showMessageDialog(null,"No se pueden agregar campos no numéricos","ERROR",JOptionPane.ERROR_MESSAGE);
}//GEN-LAST:event_jBAgregarTablaActionPerformed

    private void jBAgregarProveedorNuevoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBAgregarProveedorNuevoActionPerformed
                
        jBAgregarProveedorNuevo.setEnabled(false);
        jBFinalizarSeleccion.setEnabled(true);

        if (!jCBCANTV.isSelected())
            jCBCANTV.setEnabled(true);
        
        if (!jCBRentaBas.isSelected())
            jCBRentaBas.setEnabled(true);
        
        if (!jCBAlgunas.isSelected())
            jCBAlgunas.setEnabled(true);
        
        if (!jCBOtros.isSelected())
            jCBOtros.setEnabled(true);
        
        jCProveedoresTabla.setEnabled(false);
        jTCantidadLíneas.setEnabled(false);
        jComboTipoLinea.setEnabled(false);
        jComboTiposPago.setEnabled(false);
        jBAgregarInfoTabla.setEnabled(false);
                
    }//GEN-LAST:event_jBAgregarProveedorNuevoActionPerformed

    private void jBAceptarCantidadActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jBAceptarCantidadActionPerformed
        if (JOptionPane.showConfirmDialog(null,"¿Está seguro de la seleccion realizada?"
            + "","Información",
            JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION){
        if (!contieneLetras(jTCuentas.getText())){
            this.cuentasTotales = Integer.parseInt(jTCuentas.getText());
            jTCuentas.setEnabled(false);
        }
        else {
            JOptionPane.showMessageDialog(null,"La cantidad debe ser numérica"
                ,"Error",JOptionPane.ERROR_MESSAGE);
         }
        }
    }//GEN-LAST:event_jBAceptarCantidadActionPerformed

    private void jTOtrosTipoPagoFocusGained(java.awt.event.FocusEvent evt) {//GEN-FIRST:event_jTOtrosTipoPagoFocusGained
        jTOtrosTipoPago.setText("");
    }//GEN-LAST:event_jTOtrosTipoPagoFocusGained

    private void jComboTiposPagoActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboTiposPagoActionPerformed
       if (jComboTiposPago.getSelectedItem().toString().equals("Otro:"))
           jTOtrosTipoPago.setVisible(true);
       else jTOtrosTipoPago.setVisible(false);
    }//GEN-LAST:event_jComboTiposPagoActionPerformed

    private int contarLineasPorTipoYPago(String pago, String tipoLinea){
        int total = 0; 
        for (Historica hist: this.getInserts())
            if (hist.getTipoLinea().equals(tipoLinea) && hist.getTipoPago().equals(pago))
                total = total + hist.getCantidad();
        return total;
    }
    
    private void actualizarInfoTabla(){
        for (int i = 0; i < this.jTInformacionProveedores.getRowCount(); i++) {
                         
                         historica = new Historica();
                         
                           for (int j = 0; j < this.jTInformacionProveedores.getColumnCount(); j++) {
                               switch (j){
                               
                                case 0:  historica.setProveedor(this.jTInformacionProveedores.
                                            getValueAt(i,j).toString());
                                        break;
                                    
                                case 1: historica.setTipoLinea(
                                        this.jTInformacionProveedores.
                                            getValueAt(i,j).toString());
                                        break;
                                    
                                case 2: historica.setCantidad(Integer.
                                        parseInt(this.jTInformacionProveedores.
                                            getValueAt(i,j).toString()));
                                        break;
                                    
                                case 3: historica.setTipoPago(
                                        this.jTInformacionProveedores.
                                            getValueAt(i,j).toString());
                                        break;
                               }
                           }
                           inserts.add(historica);
                        }
             LogicaAplicacion.setP14t(contarLineasMoviles());
                        
            LogicaAplicacion.setP14_f1(contarLineasPorProveedor("CANTV"));
            LogicaAplicacion.setP14_f2(contarLineasPorProveedor("Movistar / Telefónica"));
            LogicaAplicacion.setP14_f3(contarLineasPorProveedor("DIGITEL"));
            LogicaAplicacion.setP14_f4(contarLineasPorProveedor("Otro"));
            
            LogicaAplicacion.setP15a_f1(contarLineasPorTipoYPago("Completamente","Prepago"));
            LogicaAplicacion.setP15a_f2(contarLineasPorTipoYPago("Solamente la renta básica","Prepago"));
            LogicaAplicacion.setP15a_f3(contarLineasPorTipoYPago("Algunas completamente","Prepago"));
            LogicaAplicacion.setP15a_f4(contarLineasPorTipoYPago("Algunas una parte del consumo","Prepago"));
	    LogicaAplicacion.setP15a_f5(contarLineasPorTipoYPago("Lo paga el empleado","Prepago"));
            LogicaAplicacion.setP15a_f6(contarLineasPorTipoYPago("No sabe / no contesta","Prepago"));
	    LogicaAplicacion.setP15a_f7(contarLineasPorTipoYPago("Otro:","Prepago"));
            
            LogicaAplicacion.setP15b_f1(contarLineasPorTipoYPago("Completamente","Postpago"));
            LogicaAplicacion.setP15b_f2(contarLineasPorTipoYPago("Solamente la renta básica","Postpago"));
            LogicaAplicacion.setP15b_f3(contarLineasPorTipoYPago("Algunas completamente","Postpago"));
            LogicaAplicacion.setP15b_f4(contarLineasPorTipoYPago("Algunas una parte del consumo","Postpago"));
	    LogicaAplicacion.setP15b_f5(contarLineasPorTipoYPago("Lo paga el empleado","Postpago"));
            LogicaAplicacion.setP15b_f6(contarLineasPorTipoYPago("No sabe / no contesta","Postpago"));
	    LogicaAplicacion.setP15b_f7(contarLineasPorTipoYPago("Otro:","Postpago"));
            
    }
    
    private int contarLineasMoviles(){
     int total = 0;
            for (Historica hist: this.getInserts())
                total = total + hist.getCantidad();
            
        return total;
    }
    
     private int contarLineasPorProveedor(String proveedor){
        int total = 0; 
        for (Historica hist: this.getInserts())
            if (hist.getProveedor().equals(proveedor))
                total = total + hist.getCantidad();
        return total;
    }
    
    private Boolean contieneLetras(String cadena) {
        matcher = patron.matcher(cadena);

        if (matcher.find()) {
            return true;
        } else {
            return false;
        }
    }

    private void bloquearRadios() {
        jCBCANTV.setEnabled(false);
        jCBAlgunas.setEnabled(false);
        jCBRentaBas.setEnabled(false);
        jCBOtros.setEnabled(false);
    }

    private void InsertarEnTabla(String proveedor, String lineas,
            String tipoLinea, String tipoPago) {
        ((DefaultTableModel) this.jTInformacionProveedores.getModel()).
                insertRow(0, new Object[]{proveedor, tipoLinea, lineas, tipoPago});
    }

    private void desbloquearOpciones() {
        jComboTipoLinea.setEnabled(true);
        jComboTiposPago.setEnabled(true);
        jBAgregarInfoTabla.setEnabled(true);
    }
    

    private String sustituirAcentos(String input) {
        // Cadena de caracteres original a sustituir.
        String original = "áàäéèëíìïóòöúùuñÁÀÄÉÈËÍÌÏÓÒÖÚÙÜÑçÇ";
        // Cadena de caracteres ASCII que reemplazarán los originales.
        String ascii = "aaaeeeiiiooouuunAAAEEEIIIOOOUUUNcC";
        String output = input;
        for (int i = 0; i < original.length(); i++) {
            // Reemplazamos los caracteres especiales.
            output = output.replace(original.charAt(i), ascii.charAt(i));
        }//for i
        return output;
    }

    private void borrarProveedor(String pago) {
        for (int i = 0; i < proveedores.size(); i++) {
            if (proveedores.get(i).getProv_nombre().equals(pago)) {
                proveedores.remove(i);
            }
        }
    }

    private void agregarProveedor(String pago) {
        boolean existe = false;
        for (Proveedor d : proveedores) {
            if (d.getProv_nombre().equals(pago)) {
                existe = true;
            }
        }

        if (!existe) {
            proveedores.add(new Proveedor(sustituirAcentos(pago)));
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new RegistroTelefoniaMovil().setVisible(true);
            }
        });
    }
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton JBPrev;
    private javax.swing.JButton jBAceptar;
    private javax.swing.JButton jBAceptarCantidad;
    private javax.swing.JButton jBAgregarInfoTabla;
    private javax.swing.JButton jBAgregarProveedorNuevo;
    private javax.swing.JButton jBAgregarTabla;
    private javax.swing.JButton jBFinalizarSeleccion;
    private javax.swing.JCheckBox jCBAlgunas;
    private javax.swing.JCheckBox jCBCANTV;
    private javax.swing.JCheckBox jCBOtros;
    private javax.swing.JCheckBox jCBRentaBas;
    private javax.swing.JComboBox jCProveedores;
    private javax.swing.JComboBox jCProveedoresTabla;
    private javax.swing.JComboBox jComboPaisesCiudadesDinamico;
    private javax.swing.JComboBox jComboTipoLinea;
    private javax.swing.JComboBox jComboTiposPago;
    private javax.swing.JComboBox jComboVelocidadesDinamico;
    private javax.swing.JLabel jLCuentaActualizada;
    private javax.swing.JLabel jLInformacionProveedor;
    private javax.swing.JLabel jLLogo;
    private javax.swing.JLabel jLSponsor;
    private javax.swing.JLabel jLTimer;
    private javax.swing.JLabel jLTitulo;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel10;
    private javax.swing.JLabel jLabel11;
    private javax.swing.JLabel jLabel12;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JLabel jLabel8;
    private javax.swing.JLabel jLabel9;
    private javax.swing.JLayeredPane jLayeredPane1;
    private javax.swing.JLayeredPane jLayeredPane2;
    private javax.swing.JLayeredPane jLayeredPane3;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JScrollPane jScrollPane2;
    private javax.swing.JTextField jTCantidad;
    private javax.swing.JTextField jTCantidadLíneas;
    private javax.swing.JTextField jTCuentas;
    private javax.swing.JTable jTInformacionProveedores;
    private javax.swing.JTextField jTOtroProveedor;
    private javax.swing.JTextField jTOtrosTipoPago;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration//GEN-END:variables
    
    public void run() {
        try {
            while (inicio) {

                if (segundos != 59) {
                    segundos++;
                } else {
                    if (minutos != 59) {
                        segundos = 0;
                        minutos++;
                    } else {
                        horas++;
                        minutos = 0;
                        segundos = 0;
                    }
                }

                if (minutos >= 10) {
                    jLTimer.setForeground(Color.red);
                }

                jLTimer.setText(horas + ":" + minutos + ":" + segundos);

                Thread.sleep(999);
            }

        } catch (InterruptedException ex) {
            System.out.println("Error en el sleep de aplicacion = " + ex.getMessage());
        }
    }
}
